#include <stdio.h>
#include<iostream>
#include <pthread.h>
#include <unistd.h>
#include <memory>

#include "Mythread.hpp"

void* test(void* arg) 
{
    while (1) 
    { 
        int x = 0;
        for (int i = 0; i < 1000000; i++) 
            x += i;
    }
    return NULL;
}

int main() 
{
    pthread_t tid;
    pthread_create(&tid, NULL, test, NULL);
    pthread_cancel(tid);  
    pthread_join(tid, NULL);  
    return 0;
}
// using thread_ptr_t = std::shared_ptr<ThreadModule::Mythread>;

// int main()
// {
//     std::unordered_map<std::string, thread_ptr_t> threads;
//     // 如果我要创建多线程呢？？？
//     for (int i = 0; i < 10; i++)
//     {
//         thread_ptr_t t = std::make_shared<ThreadModule::Mythread>([](){
//             while(true)
//             {
//                 //std::cout << "hello world" << std::endl;
//                 sleep(1);
//             }
//         });
//         threads[t->Name()] = t;
//     }

//     for(auto &thread:threads)
//     {
//         thread.second->start();
//         std::cout<<thread.second->Name()<<"is started"<<std::endl;
//     }
//     sleep(5);
//     for(auto &thread:threads)
//     {
//         thread.second->stop();
//         std::cout<<thread.second->Name()<<"is stopped"<<std::endl;
//     }
//     for(auto &thread:threads)
//     {
//         thread.second->join();
//         std::cout<<thread.second->Name()<<"is joined"<<std::endl;
//     }
//     return 0;
// }

// int main()
// {
//     ThreadModule::Mythread t([](){
//         while(true)
//         {
//             std::cout << "hello world" << std::endl;
//             sleep(1);
//         }
//     });

//     t.start();
//     std::cout << t.Name() << "is running" << std::endl;
//     sleep(5);

//     t.stop();
//     std::cout << "Stop thread : " << t.Name()<< std::endl;
//     sleep(1);
//     t.join();
//     std::cout << "Join thread : " << t.Name()<< std::endl;

//     return 0;
// }

// __thread int counter = 0;  // 每个线程有独立副本

// void* thread_func(void* arg) 
// {
//     for (int i = 0; i < 3; i++) 
//     {
//         counter++;  // 修改线程私有变量
//         printf("Thread %ld: counter = %d (地址: %p)\n",
//                (long)arg, counter, &counter);
//     }
//     return NULL;
// }

// int main() 
// {
//     pthread_t t1, t2;
//     pthread_create(&t1, NULL, thread_func, (void*)1);
//     pthread_create(&t2, NULL, thread_func, (void*)2);
    
//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
    
//     printf("主线程: counter = %d\n", counter);  // 输出0（主线程的独立副本）
//     return 0;
// }

// void* thread_func(void* arg) 
// {
//     // 获取当前线程的 pthread_t
//     pthread_t self_id = pthread_self();
    
//     // 打印 pthread_t 的值（以指针和整数形式）
//     printf("Thread ID (pthread_self):\n");
//     printf("  As pointer: %p\n", (void*)self_id);
//     printf("  As unsigned long: %lu\n", (unsigned long)self_id);
    
//     return NULL;
// }

// int main() 
// {
//     pthread_t tid;
    
//     // 创建线程
//     pthread_create(&tid, NULL, thread_func, NULL);
    
//     // 打印主线程看到的 pthread_t
//     std::cout<<tid<<std::endl;
//     printf("Main thread sees new thread ID:\n");
//     printf("  As pointer: %p\n", (void*)tid);
//     printf("  As unsigned long: %lu\n", (unsigned long)tid);
    
//     pthread_join(tid, NULL);
//     return 0;
// }